package nucleo.global.cci;

import nucleo.global.ContextoSessao;
import nucleo.global.visao.JanelaPrincipal;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.zk.ui.HtmlBasedComponent;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Hbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Separator;
import org.zkoss.zul.Window;

import plataforma.base.cci.CtrlExcecoes;
import projeto.configuracoes.preferencias.cdp.ConfiguracaoUsuario;

@Controller
@Scope(value = "prototype")
public class CtrlPrincipal {

	public static final String CHAVE_SESSAO = "ctrlPrincipal";

	private IGerenciadorContexto gerenciadorContextoAtual;

	private JanelaPrincipal janPrincipal;

	private Hbox hboxTituloContexto = new Hbox();

	private Label lbContexto = new Label();;

	private Window janelaStatus ;



	public CtrlPrincipal() {

	}

	public void configurarParametrosIniciaisSistema() {
		// coloco o controlador principal na sessao
		ContextoSessao.setAtributoSessao(CtrlPrincipal.CHAVE_SESSAO, this);

		carregarConfiguracoesUsuario();

	}

	public IGerenciadorContexto getCtrlAtual() {
		return gerenciadorContextoAtual;
	}

	public void setCtrlAtual(IGerenciadorContexto ctrlAtual) {
		this.gerenciadorContextoAtual = ctrlAtual;
	}

	public JanelaPrincipal getJanPrincipal() {
		return janPrincipal;
	}

	public void setJanPrincipal(JanelaPrincipal parJanPrincipal) {
		this.janPrincipal = parJanPrincipal;
	}

	public void mudarContexto(IGerenciadorContexto parCtrlEstatico) {
		if (parCtrlEstatico != null) {
			limparTelaAnterior();
			janPrincipal.appendChild(new Separator());
			setCtrlAtual(parCtrlEstatico);
			iniciarNovaTela();
		} else
			throw CtrlExcecoes.factoryExcecaoDefinicao("ctrlAtuall",
					this.getClass());

	}

	private void iniciarNovaTela() {

		HtmlBasedComponent conteudoPrincipal = gerenciadorContextoAtual
				.getConteudoPrincipal();

		if (conteudoPrincipal != null) {
			conteudoPrincipal.setParent(janPrincipal);

			String titulo = gerenciadorContextoAtual.getTitulo();
			
			if (titulo != null)
				getJanPrincipal().setTitle(titulo);
			else {
				throw CtrlExcecoes.factoryExcecaoDefinicao(
						"titulo da Janela Principal", this.getClass());
			}
		}

	}

	private void limparTelaAnterior() {

		if (gerenciadorContextoAtual != null) {

			janPrincipal.getChildren().clear();
		}
	}

	public static void carregarConfiguracoesUsuario() {
		ConfiguracaoUsuario configuracaoUsuario = ContextoSessao
				.getUsuarioLogado().getConfiguracao();
		ContextoSessao.setAtributoSessao(ConfiguracaoUsuario.LINHAS_PAGINA,
				configuracaoUsuario.getQtLinhasPorTabela());
		
		ContextoSessao.setAtributoSessao(ConfiguracaoUsuario.LINHAS_PAGINA_MINHAS_ATIVIDADES,
				configuracaoUsuario.getQtLinhasMinhasAtividades());
		
		ContextoSessao.setAtributoSessao(ConfiguracaoUsuario.LINHAS_PAGINA_MINHAS_TAREFAS,
				configuracaoUsuario.getQtLinhasMinhasTarefas());

	}

	public static void atualizarConfiguracoesUsuario(
			ConfiguracaoUsuario configuracaoUsuario) {

		ContextoSessao.getUsuarioLogado().setConfiguracao(configuracaoUsuario);
		carregarConfiguracoesUsuario();

	}

	public void showStatus(String string) {
		janelaStatus.getChildren().clear();
		Label lbStatus = new Label(string);
		lbStatus.setSclass("lb-status");
		janelaStatus.appendChild(lbStatus);
		
		Clients.evalJavaScript("toogleJanelaStatus();");

	}

	public void setJanelaStatus(Window janelaStatus) {
		//init do componente de status.Some com ele
		Clients.evalJavaScript("jq('$janelaStatus').slideToggle(0);");
		
		this.janelaStatus = janelaStatus;
		
	}

}
